有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java正则表达式匹配子字符串/字符在字符串中出现的次数

我正在编写一个程序来识别有效的(由用户定义的)表达式,并且我需要能够匹配特定字符在一个部分与另一个部分匹配的次数。例如,如果我使用pq系统,在

(some number of dashes)p-q(some number of dashes)

p之前的破折号数量必须与q之后的破折号数量相匹配(对于任意数量的破折号),才能使其成为有效表达式

我正试图使这个强大/通用化(用户定义的规则,你可以使用*而不是-,你可以这样做,你需要在q后面增加两倍的破折号,等等),我在考虑添加一些特殊的文本(比如-(%%n%%)p-q-(%%n%%),任何在它后面有(%%n%%)的东西都必须精确地显示“n”次),但在我这么做之前,是否有任何内置的regex功能/相当简单的修复程序,或者我是否需要从%%开始

提前谢谢


编辑:再看看我的问题,更好的方法是我需要找出一种方法来标记两个(或可能更多)子字符串(以一般方式)以验证它们是否匹配。我在如何操作上有一定程度的灵活性(不仅仅局限于regex),但系统的其余部分使用regex,因此一些不冲突/大规模过度复杂的操作是理想的


共 (2) 个答案

  1. # 1 楼答案

    如果我没弄错的话,正则表达式是不够的,因为您正试图捕获由非正则语法生成的字符串。一些简单的pushdown automaton应该在这里有所帮助

  2. # 2 楼答案

    如果要允许用户选择之前和之后的编号, 正则表达式将是微不足道的

    通常,这是一种为before和after构造变量regex的方法

     ( -{1,10} )  # (1)
     p-q
     \1           # Backreference to capture group 1
    

    如果您想动态构造字符串,它应该是这样的
    "(-{1," + vNum + "})p-q\\1"
    您也可以像这样在后端添加一个量词
    "(-{1," + vNum + "})p-q\\1{" + nFactor + }"

    您可以更改量词的形式以获得所需的任何内容,或范围{1,3}

    但是请记住,捕获组包含后端所需内容的子集